package com.cn.service.impl;

import com.cn.mapper.IdleItemMapper;
import com.cn.mapper.UserMapper;
import com.cn.entity.IdleItem;
import com.cn.entity.User;
import com.cn.service.IdleItemService;
import com.cn.vo.PageResult;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class IdleItemServiceImpl implements IdleItemService {

    @Autowired
    private IdleItemMapper idleItemMapper;

    @Autowired
    private UserMapper userMapper;

    /**
     * 查询闲置信息，同时查出发布者的信息
     * @param id
     * @return
     */
    public IdleItem getIdleItem(Long id) {
        IdleItem idleItem = idleItemMapper.selectByPrimaryKey(id);
        if(idleItem !=null){
            idleItem.setUser(userMapper.selectByPrimaryKey(idleItem.getUserId()));
        }
        return idleItem;
    }

    /**
     * 搜索，分页
     * 同时查出闲置发布者的信息
     * @param findValue
     * @param page
     * @param nums
     * @return
     */
    public PageResult<IdleItem> findIdleItem(String findValue, int page, int nums) {
        // 使用PageHelper设置分页
        PageHelper.startPage(page, nums);
        List<IdleItem> list = idleItemMapper.findIdleItemForPage(findValue);

        // 填充用户信息
        fillUserInfo(list);

        // 返回PageResult对象
        return new PageResult<>(new PageInfo<>(list).getTotal(), list);
    }

    /**
     * 更新闲置信息
     * @param idleItem
     * @return
     */
    public boolean updateIdleItem(IdleItem idleItem){
        return idleItemMapper.updateByPrimaryKeySelective(idleItem)==1;
    }

    /**
     * 分页获取闲置物品
     * @param status
     * @param page
     * @param nums
     * @return
     */
    public PageResult<IdleItem> adminGetIdleList(int status, int page, int nums) {
        // 使用PageHelper设置分页
        PageHelper.startPage(page, nums);
        List<IdleItem> list = idleItemMapper.getIdleItemByStatusForPage(status);

        // 填充用户信息
        fillUserInfo(list);

        // 返回PageResult对象
        return new PageResult<>(new PageInfo<>(list).getTotal(), list);
    }

    // 根据不同的状态查找闲置物品
    @Override
    public PageResult<IdleItem> findIdleItem1(String findValue, int status, int page, int nums) {
        // 使用PageHelper设置分页
        PageHelper.startPage(page, nums);
        List<IdleItem> list = idleItemMapper.findIdleItem1ForPage(findValue, status);

        // 填充用户信息
        fillUserInfo(list);

        // 返回PageResult对象
        return new PageResult<>(new PageInfo<>(list).getTotal(), list);
    }

    /**
     * 填充用户信息
     * @param list
     */
    private void fillUserInfo(List<IdleItem> list) {
        if(list.size()>0){
            List<Long> idList=new ArrayList<>();
            for(IdleItem i:list){
                idList.add(i.getUserId());
            }
            List<User> userList= userMapper.findUserByList(idList);
            Map<Long, User> map=new HashMap<>();
            for(User user:userList){
                map.put(user.getId(),user);
            }
            for(IdleItem i:list){
                i.setUser(map.get(i.getUserId()));
            }
        }
    }

    /**
     * 根据分类标签查询商品
     */
    @Override
    public PageResult<IdleItem> findIdleItemByLabel(int idleLabel, int page, int nums) {
        // 使用PageHelper设置分页
        PageHelper.startPage(page, nums);
        List<IdleItem> list = idleItemMapper.findIdleItemByLableForPage(idleLabel);

        // 填充用户信息
        fillUserInfo(list);

        // 返回PageResult对象
        return new PageResult<>(new PageInfo<>(list).getTotal(), list);
    }
}
